#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());

    pid_t pid = fork();
    if (pid == 0) { // 当前执行的是子进程
        printf("子进程(%d)开始执行\n", getpid());
        // 执行一个命令程序: ping  www.baidu.com -c 5
        char *path = "/bin/ping";
        char *argv[] = {path, "www.baidu.com", "-c", "5", NULL};  // 数组的最后一个元素必须是NULL
        execve(path, argv, NULL);
        // 找不到对应的命令程序执行，失败了，立即结束当前子进程
        _exit(EXIT_FAILURE);
    } else { // 当前执行的父进程，也Main进程
        printf("父进程(%d)继续执行\n", getpid());
        // 等待子进程结束
        int status;
        waitpid(pid, &status, 0);
        printf("子进程结束，回到父进程继续执行 status=%d\n", status);
    }

    printf("main进程(%d)即将结束 \n", getpid());
    // return 0;
    exit(EXIT_SUCCESS);
}
